#include <iostream>
#include <map>
#include <vector>
using namespace std;

/// <题目描述>
/// 给定一个整数数组 nums 和一个整数目标值 target，请你在该数组中找出 和为目标值 target  的那 两个 整数，并返回它们的数组下标。
///
///你可以假设每种输入只会对应一个答案。但是，数组中同一个元素在答案里不能重复出现。
/// <解决方法>
/// 一，通过遍历的方式
/// 二，通过map
/// map<int,int> aa   我们的aa key值是数组的值，value的下标
/// 先插入nums的值进map里面
/// 遍历nums通过  target - nums[i]的值得到一个值 然后和比较map里面的所有元素的key，判断是否存在一个值key满足
/// 并且我们可以通过aa[target - nums[i]] ！= i判断他的下标不能是相同数组的下标     
/// 
/// <此题目用到的接口>
/// 我们map 插入的时候，可以使用map<int,int>::value_type(1,2);
/// a.count(target); 这个判断我们map里面是否存在与target 相同的key，如果存在则返回他在map里面有多个相同key，由于我们map 去重，则返回1
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target)
    {
        map<int, int> a;
        vector<int> v(2, -1);
        for (int i = 0; i < nums.size(); i++)
            a.insert(map<int, int>::value_type(nums[i], i));
        for (int i = 0; i < nums.size(); i++)
        {
            //a.count  含义是找到和括号里面的值相同的key值，并返回他的存在的数量，因为map会去重，因此返回1
            //a[target -nums[i]] 表示不能和他一样
            if (a.count(target - nums[i]) > 0 && (a[target - nums[i]] != i))
            {
                v[0] = i;
                v[1] = a[target - nums[i]];
                break;
            }
        }
        return v;
    }
};
int main()
{
	return 0;
}
